/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: syyyy
 * Date: 2025-10-16
 * Time: 20:46
 */
import java.util.Arrays;

public class MaxProgramsOnTape {
    public static int getMaxProgramCount(int[] programLengths, int tapeLength) {
        // 边界处理：无程序或磁带长度为0，直接返回0
        if (programLengths == null || programLengths.length == 0 || tapeLength <= 0) {
            return 0;
        }

        // 1. 对程序长度从小到大排序（核心：优先选短程序）
        Arrays.sort(programLengths);

        int currentTotal = 0; // 当前已占用的磁带长度
        int count = 0;        // 已存储的程序数量

        // 2. 依次累加短程序，直到超过磁带长度
        for (int length : programLengths) {
            if (currentTotal + length <= tapeLength) {
                currentTotal += length;
                count++;
            } else {
                break; // 再加下一个程序会超，直接退出
            }
        }

        return count;
    }

    // 测试示例
    public static void main(String[] args) {
        // 示例1：程序长度[3,1,4,2]，磁带长度6
        int[] lengths1 = {3, 1, 4, 2};
        int tape1 = 6;
        System.out.println("最多存储程序数：" + getMaxProgramCount(lengths1, tape1)); // 输出3（1+2+3=6）

        // 示例2：程序长度[5,3,2,7]，磁带长度10
        int[] lengths2 = {5, 3, 2, 7};
        int tape2 = 10;
        System.out.println("最多存储程序数：" + getMaxProgramCount(lengths2, tape2)); // 输出3（2+3+5=10）
    }
}